熔断

什么是服务雪崩

在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以通过 HTTP/RPC 相互调用,在 Spring Cloud 中可以用 ==RestTemplate== + ==LoadBalanceClient== 和 ==Feign== 来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证 100% 可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet 容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的 “雪崩” 效应。为了解决这个问题,业界提出了 ++熔断器模型++。

Spring Cloud微服务设计中如何才能实现这样的机制呢?这里涉及到几个问题:

  • 微服务如何定义为故障,熔断的条件是什么?如何确定当前调用的微服务不可用,从而可以实现熔断操作;

  • 被定义为故障的微服务恢复后如何让熔断方感知?当前微服务何时才可以继续正常的调用需要调用的其他微服务,实现故障恢复;

Spring Cloud的代码实现机制是什么样的?

在Spring Cloud微服务设计中需要通过集成Hystrix框架来实现微服务间的熔断保护机制,Hystrix框架会通过监控微服务之间的调用情况,来决定是否启动熔断保护。